/**
 * 兼容箭头函数的防抖封装
 * @param {Function} fn - 需要防抖的函数（支持普通函数和箭头函数）
 * @param {number} delay - 延迟时间（毫秒，默认500ms）
 * @param {boolean} immediate - 是否立即执行（默认false）
 * @returns {Function} - 返回防抖处理后的函数（带cancel方法）
 */
export const debounce = (fn, delay = 500, immediate = false) => {
  let timer = null
  
  const debounced = (...args) => {
    // 清除已有定时器
    if (timer) {
      clearTimeout(timer)
      timer = null
    }

    // 立即执行模式（首次触发时立即执行）
    if (immediate && !timer) {
      fn(...args) // 箭头函数无需处理this
      immediate = false
    }

    // 设置新的定时器
    timer = setTimeout(() => {
      fn(...args) // 箭头函数无需处理this
      timer = null
    }, delay)
  }

  // 添加取消方法
  debounced.cancel = () => {
    if (timer) {
      clearTimeout(timer)
      timer = null
    }
  }

  return debounced
}